#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
typedef long long LL;

double p[16][16];
double ex[1<<16];
int h[16][16];
int m,n; // m visitor n city

void init(){
    for (int i=0; i<m; i++){
        p[i][0]=1;
        scanf("%lf",&p[i][1]);
        for (int j=2; j<n; j++) p[i][j]=p[i][j-1]*p[i][1];
    }
    for (int i=0; i<m; i++)
        for (int j=0; j<n; j++) scanf("%d",&h[i][j]);
}

void step(){
    memset(ex,0,sizeof(ex));
    for (int mask=0; mask<(1<<m); mask++)
        for (int i=0; i<m; i++)
            if ((mask>>i)&1) ex[mask]+=p[i][1];
}

double calc(){
    double rst=0;
    for (int i=0; i<m; i++)
        for (int j=0; j<n; j++) rst+=p[i][j]*h[i][j];
    for (int j=1; j<n; j++)
        for (int mask=0; mask<(1<<m); mask++){
            int cnt=__builtin_popcount(mask);
            double pr=1, tmp=0;
            for (int i=0; i<m; i++)
                if ((mask>>i)&1){
                    pr*=p[i][j-1];
                    tmp+=p[i][1]*h[i][j]*(ex[mask^(1<<i)]+1)/cnt;
                }
                else
                    pr*=(1-p[i][j-1]);
            rst+=pr*tmp;
        }
    return rst;
}

int main(){
    while (scanf("%d%d",&m,&n)!=EOF){
        init();
        step();
        double rst=calc();
        printf("%.7lf\n",rst);
    }
    return 0;
}
